package com.cari.oa.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.cari.oa.dao.BaseDao;
import com.cari.oa.dao.SysActionDao;
import com.cari.oa.domain.SysActionEntity;

@Service
@Transactional(rollbackFor = Exception.class)
public class SysActionService extends BaseService<SysActionEntity> {
	
	@Resource
	private SysActionDao sysActionDao;

	@Override
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	public BaseDao<SysActionEntity> getDao() {
		return sysActionDao;
	}

    /**
     * 根据英文名获取系统操作实体
     * @param enname 系统操作英文名
     * @return 系统实体对象
     */
	@Transactional(readOnly = true)
    public SysActionEntity getByEnname(String enname) {
    	return sysActionDao.getByEnname(enname);
    }
	
    /**
     * 判断操作是否被角色使用
     * @param enname 操作英文名
     * @return 是否被角色使用
     */
	@Transactional(readOnly = true)
    public boolean isActionUsedByRole(String enname) {
    	return sysActionDao.isActionUsedByRole(enname);
    }
	
	@Transactional(readOnly = true)
	public List<SysActionEntity> getActionsByRole(String roleName) {
		return sysActionDao.getActionsByRole(roleName);
	}
	
    /**
     * 根据角色名清空角色操作关系
     * @param roleName 角色英文名
     */
    public void clearRoleActionRelByRole(String roleName) {
    	sysActionDao.clearRoleActionRelByRole(roleName);
    }
    
    /**
     * 重置角色操作关系
     * @param roleName 角色英文名
     * @param actionNames 操作英文名列表
     */
    public void resetRoleActionRel(String roleName, List<String> actionNames) {
    	sysActionDao.clearRoleActionRelByRole(roleName);
    	sysActionDao.addRoleActionRel(roleName, actionNames);
    }
    
    /**
     * 判断该英文名实体对象是否存在
     * @param enname 系统操作英文名
     * @return 是否存在
     */
	@Transactional(readOnly = true)
    public boolean existByEnname(String enname) {
    	return sysActionDao.existByEnname(enname);
    }
    
    /**
     * 分页查询系统操作实体对象
     * @param enname 系统操作英文名
     * @param alias 系统操作别名
     * @param moduleName 所属模块英文名
     * @param page 当前页
     * @param size 每页条数
     * @return 分页实体
     */
	@Transactional(readOnly = true)
    public List<SysActionEntity> getPage(String enname, String alias, String moduleName, int page, int size) {
    	return sysActionDao.getPage(enname, alias, moduleName, page, size);
    }
    
    /**
     * 查询的记录数
     * @param enname 系统操作英文名
     * @param alias 系统操作别名
     * @param moduleName 所属模块英文名
     * @return 记录数
     */
	@Transactional(readOnly = true)
    public long getCount(String enname, String alias, String moduleName) {
    	return sysActionDao.getCount(enname, alias, moduleName);
    }
}
